package com.mgq.juc.cas;

import java.util.concurrent.atomic.AtomicReferenceFieldUpdater;

/**
 * 字段更新器,用于保护对象的字段的线程安全
 * AtomicReferenceFieldUpdater 保护引用类型线程安全
 * AtomicLongFieldUpdater      保护Long类型线程安全
 * AtomicIntegerFieldUpdater      保护Integer类型线程安全
 */
public class TestAtomicReferenceField {


    public static void main(String[] args) {
        Student student = new Student();
        AtomicReferenceFieldUpdater<Student,String> updater =
                //参数一 需要包含的类 类型, 参数二 字段类型 参数三字段名
                AtomicReferenceFieldUpdater.newUpdater(Student.class, String.class, "name");
        boolean value = updater.compareAndSet(student, null, "张三");
        System.out.println(value);
        System.out.println(student);
    }
}

class Student {
    //必须用volatile来修饰
    volatile String name;

    @Override
    public String toString() {
        return "Student{" +
                "name='" + name + '\'' +
                '}';
    }
}
